home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / modelers / geomview / source.lha / Geomview / include / geomclass.h < prev    next >
C/C++ Source or Header  |  1993-02-15  |  5KB  |  140 lines

  1. /* Copyright (c) 1992 The Geometry Center; University of Minnesota
  2.    1300 South Second Street;  Minneapolis, MN  55454, USA;
  3.    
  4. This file is part of geomview/OOGL. geomview/OOGL is free software;
  5. you can redistribute it and/or modify it only under the terms given in
  6. the file COPYING, which you should have received along with this file.
  7. This and other related software may be obtained via anonymous ftp from
  8. geom.umn.edu; email: software@geom.umn.edu. */
  9.  
  10. /* Authors: Charlie Gunn, Stuart Levy, Tamara Munzner, Mark Phillips */
  11.  
  12. #ifndef GEOMCLASSDEF
  13. #define GEOMCLASSDEF
  14.  
  15. #undef    GEOM_SM
  16.  
  17. #include "geom.h"
  18. #include "appearance.h"
  19. #include "ooglutil.h"
  20. #include "pick.h"
  21.  
  22. typedef char   *GeomNameFunc( void );
  23. typedef GeomClass   *GeomMethodsFunc( Geom *object );
  24.  
  25. typedef Geom *GeomMessageFunc( Geom *, int ac, char *av[] );
  26.  
  27. typedef Geom *GeomCopyFunc( Geom *object );
  28. typedef Geom *GeomCreateFunc( Geom *existing, GeomClass *Class, va_list args );
  29. typedef int   GeomGetFunc( Geom *g, int attribute, void *attrp );
  30. typedef int   GeomDeleteFunc( Geom *object );
  31. typedef Geom *GeomReplaceFunc( Geom *object, Geom *newchild );
  32. typedef Geom *GeomIterateFunc( GeomIter *iter, int op );  /* What should the interface be? */
  33. typedef Geom *GeomLoadFunc( char *name );
  34. typedef Geom *GeomFLoadFunc( FILE *file, char *name );
  35. typedef Geom *GeomSaveFunc( Geom *object, char *name );
  36. typedef Geom *GeomFSaveFunc( Geom *object, FILE *file, char *name );
  37.  
  38. typedef Geom *GeomPositionFunc( Geom *object, Transform T );
  39. typedef Geom *GeomTransformFunc( Geom *object, Transform T );
  40. typedef Geom *GeomTransformToFunc( Geom *object, Transform T );
  41. typedef Geom *GeomRotateFunc( Geom *object, float angle, Point3 *axis  );
  42. typedef Geom *GeomTranslateFunc( Geom *object, float x, float y, float z );
  43. typedef Geom *GeomScaleFunc( Geom *object, float x, float y, float z );
  44.  
  45. typedef Geom *GeomEvertFunc( Geom *object );
  46. typedef Geom *GeomBoundFunc( Geom *object, Transform T );
  47. typedef Geom *GeomBoundSphereFunc( Geom *object, Transform T, int space );
  48. typedef Geom *GeomEvalFunc(  Geom *object, float u, float v );
  49. typedef Geom *GeomDiceFunc( Geom *object, int nu, int nv );
  50. typedef Geom *GeomSubdivideFunc( /* Geom *object */ );
  51.  
  52. typedef Geom *GeomPickFunc( /* Geom *, Pick *, Appearance *, Transform */ );
  53.  
  54. typedef Geom *GeomFacingFunc( /* Geom *object, ... */ );
  55. typedef Geom *GeomDrawFunc( /* Geom *object */ );
  56.  
  57. typedef    int GeomExportFunc( Geom *object, Pool *p );
  58. typedef Geom *GeomImportFunc( Pool *p );
  59. typedef    Geom *GeomUnexportFunc( Handle *h );
  60. typedef Geom *GeomScanFunc( Geom *g, int (*func)(/*Geom*,Handle**,void *arg*/), void *arg );
  61. typedef Geom *GeomAppendFunc( Geom *g, Handle *h, Geom *newitem );
  62.  
  63. struct GeomClass
  64. {
  65.  
  66.     /* General Methods */
  67.     GeomClass    *super;        /* superclass of this class */
  68.     GeomNameFunc    *name;
  69.     GeomMethodsFunc *methods;
  70.     GeomMessageFunc *message;
  71.  
  72.     GeomGetFunc    *get;
  73.     GeomCreateFunc    *create;
  74.     GeomDeleteFunc    *Delete;
  75.     GeomCopyFunc    *copy;
  76.     GeomReplaceFunc *replace;
  77.     GeomExtFunc    **extensions;    /* Extension methods live here */
  78.     GeomFLoadFunc    *fload;
  79.     int        n_extensions;    /* Size of extensions[] array */
  80.     GeomFSaveFunc    *fsave;
  81.  
  82.     /* Geometric Methods */
  83.     GeomPositionFunc *position;
  84.     GeomTransformFunc *transform;
  85.     GeomTransformToFunc *transformto;
  86.  
  87.     GeomEvertFunc  *evert;
  88.     GeomBoundFunc  *bound;
  89.     GeomEvalFunc   *eval;
  90.     GeomDiceFunc   *dice;
  91.     GeomSubdivideFunc *subdivide;
  92.  
  93.     /* Picking methods */
  94.     GeomPickFunc    *pick;
  95.     GeomBoundSphereFunc *boundsphere;
  96.     GeomIterateFunc    *iterate;
  97.     GeomAppendFunc    *append;    /* Append new item to hierarchy object */
  98.     GeomScanFunc    *scan;
  99.  
  100.     /* Graphics Methods */
  101.     GeomFacingFunc    *facing;
  102.     GeomDrawFunc    *draw;
  103.  
  104.     /* Communications methods */
  105.     GeomExportFunc    *export;
  106.     GeomImportFunc    *import;
  107.     GeomUnexportFunc *unexport;
  108. };
  109.  
  110. extern GeomClass *GeomClassCreate();
  111. extern GeomClass *GeomSubClassCreate();
  112. extern GeomClass *GeomClassLookup(char *classname);
  113. extern void     *GeomClassIterate();
  114. extern GeomClass *GeomNextClass( void *iter );
  115. extern GeomClass *GeomFName2Class( char *fname );
  116.  
  117.  
  118. /* This is the "common" geom stuff which starts every geom */
  119. #define GEOMFIELDS    \
  120.     REFERENCEFIELDS    /* magic, ref_count, handle */    \
  121.     struct GeomClass    *Class;    \
  122.     struct Appearance    *ap;    \
  123.     Handle        *aphandle;    \
  124.     int            geomflags;
  125.  
  126. struct Geom {    /* common data structures for all Geom's */
  127.     GEOMFIELDS
  128. } ;
  129.  
  130. typedef struct HGeom {    /* This tuple appears in hierarchy objects */
  131.     Handle *h;
  132.     Geom *g;
  133. } HGeom;
  134.  
  135.     /* 32-bit magic numbers for OOGL data types */
  136. #define    GeomMagic(key, ver)    OOGLMagic('g', ((key) << 8) | ((ver)&0xff))
  137. #define GeomIsMagic(magic)    (((magic) & 0xffff0000) == GeomMagic(0,0))
  138.  
  139. #endif /*GEOMCLASSDEF*/
  140.